package com.qianseit.westore.ui.pulltorefresh.lib;

import android.content.Context;
import android.util.AttributeSet;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.widget.ListView;

import com.qianseit.westore.ui.pulltorefresh.lib.internal.EmptyViewMethodAccessor;

public class PullToRefreshListView extends
		PullToRefreshAdapterViewBase<ListView> {

	class InternalListView extends ListView implements EmptyViewMethodAccessor {

		public InternalListView(Context context, AttributeSet attrs) {
			super(context, attrs);
		}

		@Override
		public void setEmptyView(View emptyView) {
			super.setEmptyView(emptyView);
		}

		@Override
		public void setEmptyViewInternal(View emptyView) {
			super.setEmptyView(emptyView);
		}

		public ContextMenuInfo getContextMenuInfo() {
			return super.getContextMenuInfo();
		}
	}

	public PullToRefreshListView(Context context) {
		super(context);
		this.setDisableScrollingWhileRefreshing(false);
	}

	public PullToRefreshListView(Context context, int mode) {
		super(context, mode);
		this.setDisableScrollingWhileRefreshing(false);
	}

	public PullToRefreshListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.setDisableScrollingWhileRefreshing(false);
	}

	@Override
	public ContextMenuInfo getContextMenuInfo() {
		return ((InternalListView) getRefreshableView()).getContextMenuInfo();
	}

	// public void setReleaseLabel(String releaseLabel) {
	// super.setReleaseLabel(releaseLabel);
	// if (null != headerLoadingView) {
	// headerLoadingView.setReleaseLabel(releaseLabel);
	// }
	// if (null != footerLoadingView) {
	// footerLoadingView.setReleaseLabel(releaseLabel);
	// }
	// }
	//
	// public void setPullLabel(String pullLabel) {
	// super.setPullLabel(pullLabel);
	//
	// if (null != headerLoadingView) {
	// headerLoadingView.setPullLabel(pullLabel);
	// }
	// if (null != footerLoadingView) {
	// footerLoadingView.setPullLabel(pullLabel);
	// }
	// }
	//
	// public void setRefreshingLabel(String refreshingLabel) {
	// super.setRefreshingLabel(refreshingLabel);
	//
	// if (null != headerLoadingView) {
	// headerLoadingView.setRefreshingLabel(refreshingLabel);
	// }
	// if (null != footerLoadingView) {
	// footerLoadingView.setRefreshingLabel(refreshingLabel);
	// }
	// }

	@Override
	protected final ListView createRefreshableView(Context context,
			AttributeSet attrs) {
		ListView lv = new InternalListView(context, attrs);
		// final int mode = this.getMode();
		//
		// // Loading View Strings
		// String pullLabel =
		// context.getString(R.string.pull_to_refresh_pull_label);
		// String refreshingLabel =
		// context.getString(R.string.pull_to_refresh_refreshing_label);
		// String releaseLabel =
		// context.getString(R.string.pull_to_refresh_release_label);

		// Add Loading Views
		// if (mode == MODE_PULL_DOWN_TO_REFRESH || mode == MODE_BOTH) {
		// FrameLayout frame = new FrameLayout(context);
		// headerLoadingView = new LoadingLayout(context,
		// MODE_PULL_DOWN_TO_REFRESH, releaseLabel, pullLabel,
		// refreshingLabel);
		// frame.addView(headerLoadingView,
		// FrameLayout.LayoutParams.FILL_PARENT,
		// FrameLayout.LayoutParams.WRAP_CONTENT);
		// headerLoadingView.setVisibility(View.GONE);
		// lv.addHeaderView(frame);
		// }
		// if (mode == MODE_PULL_UP_TO_REFRESH || mode == MODE_BOTH) {
		// FrameLayout frame = new FrameLayout(context);
		// footerLoadingView = new LoadingLayout(context,
		// MODE_PULL_UP_TO_REFRESH, releaseLabel, pullLabel,
		// refreshingLabel);
		// frame.addView(footerLoadingView,
		// FrameLayout.LayoutParams.FILL_PARENT,
		// FrameLayout.LayoutParams.WRAP_CONTENT);
		// footerLoadingView.setVisibility(View.GONE);
		// lv.addFooterView(frame);
		// }

		// Set it to this so it can be used in ListActivity/ListFragment
		lv.setId(android.R.id.list);
		return lv;
	}

	// @Override
	// protected void setRefreshingInternal(boolean doScroll) {
	// super.setRefreshingInternal(false);
	//
	// final LoadingLayout originalLoadingLayout, listViewLoadingLayout;
	// final int selection, scrollToY;
	//
	// switch (getCurrentMode()) {
	// case MODE_PULL_UP_TO_REFRESH:
	// originalLoadingLayout = this.getFooterLayout();
	// listViewLoadingLayout = this.footerLoadingView;
	// selection = refreshableView.getCount() - 1;
	// scrollToY = getScrollY() - getHeaderHeight();
	// break;
	// case MODE_PULL_DOWN_TO_REFRESH:
	// default:
	// originalLoadingLayout = this.getHeaderLayout();
	// listViewLoadingLayout = this.headerLoadingView;
	// selection = 0;
	// scrollToY = getScrollY() + getHeaderHeight();
	// break;
	// }
	//
	// if (doScroll) {
	// // We scroll slightly so that the ListView's header/footer is at the
	// // same Y position as our normal header/footer
	// this.setHeaderScroll(scrollToY);
	// }
	//
	// // Hide our original Loading View
	// originalLoadingLayout.setVisibility(View.INVISIBLE);
	//
	// // Show the ListView Loading View and set it to refresh
	// listViewLoadingLayout.setVisibility(View.VISIBLE);
	// listViewLoadingLayout.refreshing();
	//
	// if (doScroll) {
	// // Make sure the ListView is scrolled to show the loading
	// // header/footer
	// refreshableView.setSelection(selection);
	//
	// // Smooth scroll as normal
	// smoothScrollTo(0);
	// }
	// }

	// @Override
	// protected void resetHeader() {
	//
	// LoadingLayout originalLoadingLayout;
	// LoadingLayout listViewLoadingLayout;
	//
	// int scrollToHeight = getHeaderHeight();
	// final boolean doScroll;
	//
	// switch (getCurrentMode()) {
	// case MODE_PULL_UP_TO_REFRESH:
	// originalLoadingLayout = this.getFooterLayout();
	// listViewLoadingLayout = footerLoadingView;
	// doScroll = this.isReadyForPullUp();
	// break;
	// case MODE_PULL_DOWN_TO_REFRESH:
	// default:
	// originalLoadingLayout = this.getHeaderLayout();
	// listViewLoadingLayout = headerLoadingView;
	// scrollToHeight *= -1;
	// doScroll = this.isReadyForPullDown();
	// break;
	// }
	//
	// // Set our Original View to Visible
	// originalLoadingLayout.setVisibility(View.VISIBLE);
	//
	// // Scroll so our View is at the same Y as the ListView header/footer,
	// // but only scroll if the ListView is at the top/bottom
	// if (doScroll) {
	// this.setHeaderScroll(scrollToHeight);
	// }
	//
	// // Hide the ListView Header/Footer
	// listViewLoadingLayout.setVisibility(View.GONE);
	//
	// super.resetHeader();
	// }

}
